﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;

using Fennec;

namespace IHM.ClassesFonction
{
    public class ReactionEvenementBandeauBas
    {
        FenetreJeu fenetre;

        public ReactionEvenementBandeauBas(FenetreJeu f)
        {
            fenetre = f;
        }

        //Bandeau du bas
        // EV_CLIC_SUR_CASE
        public void evenementBasClicSurCase()
        {
            if (fenetre.actionAllerCommencée)
            {
                evenementCarteActionAller();
            }
            evenementBasClicSurCaseVille();
            evenementBasClicSurCaseUnites();
            evenementBasClisSurCaseCase();
        }

        public void evenementCarteActionAller()
        {
            if (fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée] is UnitéEtudiant)
            {
                fenetre.reactionEvenementCarte.evenementCarteUniteTuee(EElement.EL_ET, fenetre.anciennePosition.X, fenetre.anciennePosition.Y);
                fenetre.reactionEvenementCarte.evenementCarteAjouterUnite(EElement.EL_ET, fenetre.partie.position_sélectionnée.X, fenetre.partie.position_sélectionnée.Y, fenetre.partie.civilisation_courante);
            }

            else if (fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée] is UnitéEnseignant)
            {
                fenetre.reactionEvenementCarte.evenementCarteUniteTuee(EElement.EL_ENS, fenetre.anciennePosition.X, fenetre.anciennePosition.Y);
                fenetre.reactionEvenementCarte.evenementCarteAjouterUnite(EElement.EL_ENS, fenetre.partie.position_sélectionnée.X, fenetre.partie.position_sélectionnée.Y, fenetre.partie.civilisation_courante);
            }

            else if (fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée] is UnitéDirecteur)
            {
                fenetre.reactionEvenementCarte.evenementCarteUniteTuee(EElement.EL_DIR, fenetre.anciennePosition.X, fenetre.anciennePosition.Y);
                fenetre.reactionEvenementCarte.evenementCarteAjouterUnite(EElement.EL_DIR, fenetre.partie.position_sélectionnée.X, fenetre.partie.position_sélectionnée.Y, fenetre.partie.civilisation_courante);
            }
        }

        public void evenementBasClicSurCaseVille()
        {
            if (fenetre.partie.civilisations[fenetre.partie.civilisation_courante].getVille(fenetre.partie.position_sélectionnée) == null) // pas de ville sur la case -> pas d'information sur la ville (caché)
            {
                fenetre.infoVilleCase.Visibility = Visibility.Hidden;
                fenetre.infoVilleValue.Visibility = Visibility.Hidden;
                fenetre.infoVilleActions.Visibility = Visibility.Hidden;
                fenetre.infoVille.Visibility = Visibility.Hidden;
            }

            else // une ville sur la case -> informations (visibles) mises à jour
            {
                fenetre.infoVilleCase.Visibility = Visibility.Visible;
                fenetre.infoVille.Visibility = Visibility.Visible;
                fenetre.infoVilleValue.Visibility = Visibility.Visible;
                fenetre.infoVilleActions.Visibility = Visibility.Visible;

                evenementBasVilleModifiee();
            }
        }

        public void evenementBasClicSurCaseUnites()
        {
            // Si la case est visible
            if (fenetre.casesVisibles[fenetre.partie.position_sélectionnée.X, fenetre.partie.position_sélectionnée.Y]) // Attention : au clic sur une case on ne veut pas toujours changer la position sélectionnée (exemple : lors d'une attaque ou on choisit sa cible)
            {
                if (fenetre.partie.unités_sélectionnées.Count == 0)
                {
                    fenetre.infoUnites.Visibility = Visibility.Hidden;
                    fenetre.infoUnitesActions.Visibility = Visibility.Hidden;
                    fenetre.infoUnitesValue.Visibility = Visibility.Hidden;
                }
                else
                {
                    fenetre.infoUnites.Visibility = Visibility.Visible;
                    fenetre.infoUnitesActions.Visibility = Visibility.Visible;
                    fenetre.infoUnitesValue.Visibility = Visibility.Visible;

                    fenetre.infoCaseUnités.Items.Clear();
                    TextBlock tb = new TextBlock();
                    tb.Text = "Unités sur la case :";
                    fenetre.infoCaseUnités.Items.Add(tb);

                    bool premiereUnité = true;

                    foreach (KeyValuePair<int, Unité> kvp in fenetre.partie.unités_sélectionnées)
                    {
                        Button b = new Button();
                        b.Width = 100;
                        string s = kvp.Value.GetType().ToString();

                        // Récupérer le type pour affichage
                        if (s.Contains("diant"))
                        {
                            b.Content = "Etudiant";
                        }
                        else if (s.Contains("gnant"))
                        {
                            b.Content = "Enseignant";
                        }
                        else
                        {
                            b.Content = "Directeur";
                        }

                        b.Tag = kvp.Value;
                        b.Click += new System.Windows.RoutedEventHandler(fenetre.ClickUnité);

                        fenetre.infoCaseUnités.Items.Add(b);

                        if (premiereUnité)
                        {
                            premiereUnité = false;
                            fenetre.partie.sélectionnerUnité(kvp.Key);
                            evenementBasUniteSelectionneeOuModifiee();
                        }
                    }
                }
            }
        }

        // Mise à jour des informations sur la case
        public void evenementBasClisSurCaseCase()
        {
            foreach (UIElement shape in fenetre.infoGridCarte.Children)
            {
                if (shape.GetType() == typeof(System.Windows.Shapes.Rectangle))
                {
                    int x = Grid.GetColumn(shape);
                    int y = Grid.GetRow(shape);

                    if (x == fenetre.partie.position_sélectionnée.X && y == fenetre.partie.position_sélectionnée.Y)
                    {
                        bool ressource = false;

                        if (((System.Windows.Shapes.Rectangle)shape).Tag is CaseMontagne)
                        {
                            fenetre.infoCaseTypeValue.Text = "Montagne";
                            fenetre.infoCaseRessourceValue.Text = "Aucune";
                        }
                        else if (((System.Windows.Shapes.Rectangle)shape).Tag is CasePlaine)
                        {
                            fenetre.infoCaseTypeValue.Text = "Plaine";
                            fenetre.infoCaseRessourceValue.Text = "Aucune";
                        }
                        else if (((System.Windows.Shapes.Rectangle)shape).Tag is CaseDésert)
                        {
                            fenetre.infoCaseTypeValue.Text = "Désert";
                            fenetre.infoCaseRessourceValue.Text = "Aucune";
                        }
                        else if (((System.Windows.Shapes.Rectangle)shape).Tag is CaseFruit)
                        {
                            fenetre.infoCaseRessourceValue.Text = "Fruit";
                            ressource = true;
                        }
                        else if (((System.Windows.Shapes.Rectangle)shape).Tag is CaseFer)
                        {
                            fenetre.infoCaseRessourceValue.Text = "Fer";
                            ressource = true;
                        }

                        if (ressource)
                        {
                            if (((CaseDécorateur)((System.Windows.Shapes.Rectangle)shape).Tag).case_brute is CaseMontagne)
                            {
                                fenetre.infoCaseTypeValue.Text = "Montagne";
                            }
                            else if (((CaseDécorateur)((System.Windows.Shapes.Rectangle)shape).Tag).case_brute is CasePlaine)
                            {
                                fenetre.infoCaseTypeValue.Text = "Plaine";
                            }
                            else if (((CaseDécorateur)((System.Windows.Shapes.Rectangle)shape).Tag).case_brute is CaseDésert)
                            {
                                fenetre.infoCaseTypeValue.Text = "Désert";
                            }
                            fenetre.infoCaseNourritureValue.Text = (((CaseDécorateur)((System.Windows.Shapes.Rectangle)shape).Tag).nourriture).ToString();
                            fenetre.infoCaseMineraiValue.Text = (((CaseDécorateur)((System.Windows.Shapes.Rectangle)shape).Tag).minerai).ToString();
                        }
                        else
                        {
                            fenetre.infoCaseNourritureValue.Text = ((Case)((System.Windows.Shapes.Rectangle)shape).Tag).nourriture.ToString();
                            fenetre.infoCaseMineraiValue.Text = ((Case)((System.Windows.Shapes.Rectangle)shape).Tag).minerai.ToString();
                        }

                        fenetre.infoCasePositionValue.Text = "(" + x + "," + y + ")";
                        fenetre.infoCaseCouleurValue.Fill = ((System.Windows.Shapes.Rectangle)shape).Fill;
                    }
                }
            }
        }

        // EV_VILLE_MODIFIEE
        public void evenementBasVilleModifiee()
        {
            fenetre.infoVilleMineraiValue.Text = fenetre.partie.ville_selectionnée.minerai.ToString();
            fenetre.infoVilleNourritureValue.Text = fenetre.partie.ville_selectionnée.nourriture.ToString();
            fenetre.infoVillePopulationValue.Text = fenetre.partie.ville_selectionnée.population.ToString();
            fenetre.infoVillePositionValue.Text = fenetre.partie.ville_selectionnée.position.ToString();
            //fenetre.infoVilleSeuilExpansionValue.Text   = fenetre.partie.ville_selectionnée.nourriture_seuil_expansion.ToString();
        }

        // EV_UNITE_SELECTIONNEE_OU_MODIFIEE
        public void evenementBasUniteSelectionneeOuModifiee()
        {
            fenetre.infoUniteAttaqueValue.Text = fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].attaque + "/" + fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].attaque_base;
            fenetre.infoUniteDéfenseValue.Text = fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].défense + "/" + fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].défense_base;
            fenetre.infoUniteDéplacementValue.Text = fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].déplacement + "/" + fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].déplacement_base;
            fenetre.infoUnitePositionValue.Text = fenetre.partie.unités_sélectionnées[fenetre.partie.unité_selectionnée].position.ToString();

            if (fenetre.partie.civilisations[fenetre.partie.civilisation_courante].directeur_vivant) // remplacer par unités_sélectionnées[unité_selectionnée].directeurProche()
            {
                fenetre.infoUniteProxDirValue.Text = "oui";
            }
            else
            {
                fenetre.infoUniteProxDirValue.Text = "non";
            }
        }
    }
}
